home *** CD-ROM | disk | FTP | other *** search
/ Amiga Developer CD 2.1 / Amiga Developer CD v2.1.iso / Reference / DevCon / Milan_1991 / Devcon91.1 / Libraries / Commodities / LeftyMouse / leftymouse.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-09-01  |  2.7 KB  |  98 lines

  1.  
  2.    /***********************************************************************
  3.    *                                                                      *
  4.    *                            COPYRIGHTS                                *
  5.    *                                                                      *
  6.    *   Copyright (c) 1990  Commodore-Amiga, Inc.  All Rights Reserved.    *
  7.    *                                                                      *
  8.    ***********************************************************************/
  9.  
  10. #include "app.h"
  11.  
  12. /* An input expression to match any RAWKEY event with the
  13.   * CAPSLOCK qualifier bit set
  14.  */
  15. IX myix = {
  16.    IX_VERSION,             /* required                           */
  17.    NULL,                   /* matches any class */
  18.  
  19.    0,           /* Code: won't care                     */
  20.    0,           /* CodeMask: 0 means don't care about Code   */
  21.  
  22.    0,   /* qualifier I am interested in            */
  23.    0,   /* and it's the only qualifier of interest   */
  24.    0                       /* synonyms irrelevant                  */
  25. };
  26.  
  27. BOOL setupLeftyMouse(void);
  28. void myaction(struct CxMsg *,CxObj *);
  29.  
  30. BOOL setupLeftyMouse()
  31. {
  32.    CxObj   *filter;
  33.  
  34.    filter = CxFilter(NULL);
  35.    if (!filter)
  36.       return(0);
  37.  
  38.    SetFilterIX(filter, &myix);
  39.  
  40.    /** DEBUG **/
  41.    D( AttachCxObj(filter, CxDebug( 0xDEADFACE)) );
  42.  
  43.    AttachCxObj(filter, CxCustom( myaction, 0L));
  44.  
  45.    if (CxObjError(filter))
  46.    {
  47.       D( printf("nocapslock: filter error %lx\n", CxObjError(filter) ) );
  48.       DeleteCxObjAll(filter);
  49.       return(0);
  50.    }
  51.  
  52.    AttachCxObj(broker, filter);
  53.  
  54.    return(TRUE);
  55. }
  56. void myaction(cxm,co)
  57. register struct CxMsg *cxm;
  58. CxObj *co;
  59. {
  60.    register struct InputEvent *ie;
  61.    ULONG temp;
  62.  
  63.    D( kprintf("action\n") );
  64.  
  65.    /* i KNOW that all messages getting this far are CXM_IEVENT   */
  66.    ie = (struct InputEvent *) CxMsgData(cxm);
  67.  
  68.    if(ie->ie_Class == IECLASS_RAWMOUSE)
  69.    {
  70.       temp=ie->ie_Code & 0x7f;
  71.       if(temp == IECODE_LBUTTON)
  72.       {
  73.          ie->ie_Code &= ~IECODE_LBUTTON;
  74.          ie->ie_Code |= IECODE_RBUTTON;
  75.       } else
  76.          if(temp == IECODE_RBUTTON)
  77.          {
  78.             ie->ie_Code &= ~IECODE_RBUTTON;
  79.             ie->ie_Code |= IECODE_LBUTTON;
  80.          }
  81.    }
  82.  
  83.    if( ! (ie->ie_Qualifier & IEQUALIFIER_LEFTBUTTON)&&
  84.    (ie->ie_Qualifier & IEQUALIFIER_RBUTTON) )
  85.    {
  86.       if(ie->ie_Qualifier & IEQUALIFIER_RBUTTON)
  87.       {
  88.          ie->ie_Qualifier &= ~IEQUALIFIER_RBUTTON;
  89.          ie->ie_Qualifier &= IEQUALIFIER_LEFTBUTTON;
  90.       } else
  91.          if(ie->ie_Qualifier & IEQUALIFIER_LEFTBUTTON)
  92.          {
  93.             ie->ie_Qualifier &= ~IEQUALIFIER_LEFTBUTTON;
  94.             ie->ie_Qualifier &= IEQUALIFIER_RBUTTON;
  95.          }
  96.    }
  97. }
  98.